package com.hjh.netty.elect.demo5.bean;

import lombok.*;

import java.io.Serializable;

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Pmc350DevPackage implements Serializable {

    /**
     * 0xF9 (固定) 1 字节 用于识别报文头
     * 16进制0xF9转换2进制的结果：11111001
     */
    private String headerBeginMark;

    /**
     * 包标识：
     * 5 bit 为预留，低 3bit 为包标识
     * bit 2~0：
     * 000：心跳包
     * 001：表示终端发送给主站的 Modbus 回复帧，不需要
     * 主站回复
     * 010：表示终端的主动上送报文，不需要主站回复
     * 011：表示终端的主动上送报文，需要主站回复 ACK
     * 100：预留
     * 101：表示主站回复给终端的 ACK 报文
     * 110：表示主站下发的广播帧，不需要终端回复
     * 111：表示主站下发的请求帧，需要终端回复
     * bit 7~3：预留，固定为 0
     */
    private int packageType;

    /**
     * 设备识别码长度
     * <p>
     * bit 0~3：
     * 设备识别码(即注册包)长度 RegLen -1，RegLen∈[1，
     * 16]，
     * 0 代表设备识别码长度为 1
     * 1 代表设备识别码长度位 2
     * ...
     * 15 代表设备识别码长度为 16
     * Bit 4~7：预留
     */
    private int devSnLen;


    /**
     * 设备识别码(注册包)
     * N = RegLen，RegLen∈[1，16]
     */
    private String devSn;

    /**
     * PayLoad 部分总长度 1 字节 PayLoadLen，PayLoad 的长度 ∈[0,255]
     */
    private int payLoadLen;

    /**
     * PayLoad 校验和 1 字节 PayLoad 部分校验累加和
     */
    private int payLoadCheck;

    /**
     * 0xF9(固定) 1 字节
     */
    private String headerEndMark;

    /**
     * PayLoad 部分 M 字节 PayLoad 部分，长度 M= PayLoadLen
     */
    private byte[] payLoad;

}
